package com.baize.cpdepus.common;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.aliyun.oss.model.DeleteObjectsResult;
import com.aliyun.oss.model.VoidResult;
import com.aliyuncs.utils.StringUtils;
import com.baize.cpdepus.config.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 文件删除oss
 */
@Service
public class OssService {
    //TODO 当前oss的删除使用的是oss的全路径现在没法对文件进行删除工作，

    /**
     * 删除单个文件
     */
    public static boolean deleteFile(String fileName) {
        /**
         * 工具类获取值
         */
        // yourEndpoint填写Bucket所在地域对应的Endpoint。
        // 以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        // 填写Bucket名称，例如examplebucket
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
        /**
         * 填写文件名。文件名包含路径，不包含Bucket名称。
         * 例如2021/09/14/52c6a3114e634979a2934f1ea12deaadfile.png。
         */
        String[] split = fileName.split("https://" + bucketName + "." + endpoint + "/");

        String objectName = split[1];


        boolean flag = false;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 删除文件。
            VoidResult voidResult = ossClient.deleteObject(bucketName, objectName);
            if (voidResult.getResponse().getStatusCode() == 204) {
                flag = true;
            }
            // 关闭OSSClient。
            ossClient.shutdown();

        } catch (OSSException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 删除指定的多个文件
     */
    public List<String> deleteFileAll(List<String> keys) {
        /**
         * 工具类获取值
         */
        // yourEndpoint填写Bucket所在地域对应的Endpoint。
        // 以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限，
        // 风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        // 填写Bucket名称，例如examplebucket
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 删除请求
        DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucketName);
        // 赋值需要删除的文件
        deleteRequest.setKeys(keys);
        //deleteRequest.setEncodingType(URL_ENCODING);
        // 调用删除
        DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteRequest);
        // 获取删除的文件
        List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
        // 关闭OSSClient。
        ossClient.shutdown();
        return deletedObjects;
    }
}
